/**
 * @file mylib_config.h
 * @author canrad (1517807724@qq.com)
 * @brief 这个文件包含了所有的配置内容
 *   文件结构为：平台相关配置、模块配置、通用内容的定义
 *
 * @version 0.1
 * @date 2024-08-16
 * 
 */
#ifndef MYLIB_CONFIG_H
#define MYLIB_CONFIG_H

///////////////////////////////////////////////////////////////////////////////

// 单片机平台有关的宏，这些宏一般是由构建工具自动定义的

// ti的msp系列
// mspm0g3507
#ifdef __MSPM0G3507__
#    define PLATFORM_MSPM0 1
#else
#    define PLATFORM_MSPM0 0
#endif   // __MSPM0G3507__

// stm32的f系列
// stm32f103
#ifdef STM32F103xB
#    define PLATFORM_STM32 1
#else
#    define PLATFORM_STM32 0
#endif   // STM32F103xB

///////////////////////////////////////////////////////////////////////////////

// 根据单片机平台，选择使用哪些固件相关的头文件

// stm32使用hal库
#if PLATFORM_STM32
#    include <stm32f1xx_hal.h>
#endif

// mspm0使用下面这个头文件
#if PLATFORM_MSPM0
#    include <ti/devices/msp/msp.h>
#    include <ti/driverlib/driverlib.h>
#    include <ti/driverlib/m0p/dl_core.h>
#endif

///////////////////////////////////////////////////////////////////////////////

// 模块配置

// 使用串口打印信息，debug模块需要定义这个宏为1
#define USE_DEBUG_MODE 1
// 使用调试断言，需要定义这个宏为1
#define USE_DEBUG_ASSERT 1

///////////////////////////////////////////////////////////////////////////////

// 相关通用的内容定义
// 这些内容一般不需要修改

// 标准库整数类型头文件
#include <stdint.h>
// 标准库bool类型头文件
#include <stdbool.h>

// 低电平有效
#define VALID_ON_LOW_LEVEL 0
// 高电平有效
#define VALID_ON_HIGH_LEVEL 1

// 对于尽可能inline的情况下使用
#if defined(__GNUC__) // GNU编译器
    #define LIKELY_INLINE inline __attribute__((always_inline))
#elif defined(_MSC_VER) // Microsoft Visual C++
    #define LIKELY_INLINE __forceinline
#else
    #define LIKELY_INLINE inline
#endif

#endif   // !MYLIB_CONFIG_H
